11
תגובות
יש לי קובץ PHP עם הקוד הבא:
<?php
header("Content-type: application/vnd.ms-word");
header("Content-Disposition: attachment;Filename=document_name.doc");

echo "<html>";
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Windows-1252\">";
echo "<body>";
echo "<b>My first document</b>";
echo "</body>";
echo "</html>";
?>


עכשיו כשאני נכנס לתוך הקובץ הוא כמובן נותן לי הורדה למסמך הword שנבנה, אבל זה רק כאשר המשתמש ניגש לקובץ דרך הדפדפן, לעומת זאת אני מעוניין לקחת את המסמך word שנבנה ולא לתת למשתמש להוריד אותו אלה להכניס אותו לתוך קובץ zip (ziparchive class) ביחד עם עוד כמה דברים.

11 תשובות

avatar ענה intval ב 17 ליוני 2014 #

בקמקום לשלוח את הקובץ doc תייצר קובץ zip במקום ותשלח אותו.

<?php

$zip = new ZipArchive();

 if($zip->open("someName.zip",ZIPARCHIVE::CREATE)===TRUE)
 {
   // הוספת קובץ לתוך הזיפ
   $zip->addFile("document_name.doc");
   
   $zip->close();
   // סגירת הזיפ
 }

header("Content-type: application/octet-stream");
header("Content-disposition: attachment; filename=someName.zip");


יצירת קבצי zip עם PHP

אם אתה צריך, קודם צור בנפרד את הקובץ word

file_put_contents('word.doc', "
  <html>
  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=Windows-1252\">
  <body>
  <b>My first document</b>
  </body>
  </html>
"
);

avatar ענה intval ב 17 ליוני 2014 #

אפשר לחסוך את הפעולה השניה ולעשות הכל ביחד:

$zip = new ZipArchive();

 if($zip->open("someName.zip",ZIPARCHIVE::CREATE)===TRUE)
 {
   // הוספת קובץ לתוך הזיפ
   $zip->addFromString("document_name.doc", "
  <html>
  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=Windows-1252\">
  <body>
  <b>My first document</b>
  </body>
  </html>
   "
);
   
   $zip->close();
   // סגירת הזיפ
 }

header("Content-type: application/octet-stream");
header("Content-disposition: attachment; filename=someName.zip");


אל תשכח למחוק את הקובץ שיווצר בסוף הסקריפט ולתת לקובץ שם רנדומלי כדי ששני משתמשים בבת אחת יוכלו להשתמש במערכת.
אפשר גם ללכת שלב אחד רחוק יותר ולהשתמש בספריית ZIP שלא שומרת קבצים בדיסק אלא בזיכרון בלבד.

avatar ענה zacharya ב 17 ליוני 2014 #

תודה :)
יש סיבה מסויימת שבגללה המחלקה ZipArchive לא עובדת בWAMP?

avatar ענה zacharya ב 17 ליוני 2014 #

לא חשוב, עובד. תודה רבה אלכס :)

avatar ענה zacharya ב 17 ליוני 2014 #

הוא עכשיו לצערי מחרבש לי שמות בעברית. נגיד יש לי קובץ "מילים.doc" הוא יוצר אותו בארכיון כ"___??&__.doc" או משהו בסגנון (אך כל התוכן של הקובץ לא נפגע)

avatar ענה intval ב 17 ליוני 2014 #

כן. מחיפוש קצר בגוגל עולה שצריך לעשות המרת קידוד:

$name = "שם בעברית.doc";

$zip->addFromString(iconv("UTF-8","CP862",$name), "
  <html>
  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=Windows-1252\">
  <body>
  <b>My first document</b>
  </body>
  </html>
   "
);

avatar ענה OrelBeY ב 17 ליוני 2014 #

קח בחשבון שזו רק דרך לעקוף את זה, אבל הבעיה היא לא אצלך. בגרסת zip 1.11.0 (מ-PECL) תוקנה הבעיה עם קידוד UTF-8.

avatar ענה zacharya ב 18 ליוני 2014 #

ניסיתי כבר את ההמרת קידוד לפני ששאלתי וזה לא עבד ):

avatar ענה OrelBeY ב 19 ליוני 2014 #

אבל ניסית להמיר מ-UTF-8 ל-CP862?

avatar ענה zacharya ב 22 ליוני 2014 #

כן

avatar ענה intval ב 22 ליוני 2014 #

אם יש לך אפשרות - עדכן את ספריית ה zip
אם לא, נסה להשתמש בספרייה אחרת